package lib

import (
	"encoding/json"
	"fmt"
	"github.com/beego/beego/v2/client/orm"
	"ksd-social-api/utils/adr"
	"strings"
)

type PWD struct {
	// string是一个不可变的类型
	Data string
}

/**
 * @author feige
 * @date 2023-10-15
 * @version 1.0
 * @desc 序列化方法
 */
func (t *PWD) MarshalJSON() ([]byte, error) {
	stamp := adr.RsaEncryptString(fmt.Sprintf("\"%s\"", t.Data))
	return []byte(stamp), nil
}

/**
 * @author feige
 * @date 2023-10-15
 * @version 1.0
 * @desc 反序列化
 */
func (t *PWD) UnmarshalJSON(data []byte) error {
	t.Data = adr.RsaDEncryptString(strings.ReplaceAll(string(data), "\"", ""))
	return nil
}

// String 重写String方法
func (t *PWD) String() string {
	data, _ := json.Marshal(t.Data)
	return string(data)
}

// FieldType 数据类型
func (t *PWD) FieldType() int {
	return orm.TypeVarCharField
}

// SetRaw 读取数据库值 --- select
func (t *PWD) SetRaw(value interface{}) error {
	t.Data = string(value.([]uint8))
	return nil
}

// RawValue 写入数据库---insert/update
func (t *PWD) RawValue() interface{} {
	return t.Data
}
